13526
6615
Κλειστό. Αυτή η ερώτηση χρειάζεται λεπτομέρειες ή σαφήνεια. Αυτήν τη στιγμή δεν δέχεται απαντήσεις.
Θέλετε να βελτιώσετε αυτήν την ερώτηση; Προσθέστε λεπτομέρειες και διευκρινίστε το πρόβλημα με την επεξεργασία αυτής της ανάρτησης.
Κλειστό πριν από 1 έτος.
Βελτιώστε αυτήν την ερώτηση
Κάνω κάποια πρόκληση κώδικα και θέλω να λάβω τις πρώτες 3 τιμές από τον πίνακα μου, καθορίζοντας το ευρετήριο εκκίνησης και παίρνοντας μόνο τις πρώτες (3 ή μπορεί να έχουν οποιοδήποτε μήκος) τιμές από το αρχικό ευρετήριο.
Δοκίμασα αυτόν τον κώδικα και λειτουργεί, αλλά η δομή του κώδικα είναι πολύ μεγάλη, οπότε πώς μπορώ να το κάνω συντομότερο, ώστε να είναι εύκολο να κατανοηθεί.
int n = 10;
διπλή υπογραφή = νέο διπλό [] {1, 1, 1};
διπλό [] ret = νέο διπλό [n];
διπλό άθροισμα = 0;
ret [0] = υπογραφή [0];
ret [1] = υπογραφή [1];
ret [2] = υπογραφή [2];
int x, i;
για (i = 0; i 
                                
Χρησιμοποιώντας το LINQ μπορείτε να δοκιμάσετε κάτι τέτοιο:
var τιμές = array. Παράλειψη (ευρετήριο)
. Πάρτε (n)
.ToArray ();
Όπου το ευρετήριο είναι το ευρετήριο του πρώτου αντικειμένου και n ο αριθμός των αντικειμένων που θέλετε να επιλέξετε.
Π.χ. https://dotnetfiddle.net/Pk1rwY
Ως δευτερεύουσα σημείωση. Η χρήση του LINQ δεν σημαίνει ότι ο κώδικάς σας θα ήταν πιο γρήγορος. Θα ήταν πιο συμπαγές / αναγνώσιμο κ.λπ. Για να εκτιμήσετε πόσο αποτελεσματικός είναι ο κώδικάς σας, πρέπει να χρησιμοποιήσετε κάτι όπως το BenchmarkDotNet
|
Χωρίς λύση Linq:
ιδιωτικό στατικό T [] Extract  (T [] source, int fromIndex, int length) {
εάν (null == πηγή)
ρίξτε νέο ArgumentNullException (nameof (πηγή));
αλλιώς εάν (απόIndex <0)
ρίξτε νέο ArgumentOutOfRangeException (nameof (fromIndex),
"Από το ευρετήριο πρέπει να είναι μη αρνητικό").
αλλιώς εάν (μήκος <0)
ρίξτε νέο ArgumentOutOfRangeException (nameof (length),
"Το μήκος πρέπει να είναι μη αρνητικό").
αν (απόIndex> = πηγή. Μήκος || μήκος == 0)
επιστροφή νέου T [0];
T [] αποτέλεσμα = νέο T [Math.Min (μήκος, πηγή. Μήκος - απόIndex)];
Array.Copy (πηγή, απόIndex, αποτέλεσμα, 0, αποτέλεσμα. Μήκος);
αποτέλεσμα επιστροφής;
}
Τότε
διπλό [] υπογραφή = νέο διπλό [] {0, 1, 2, 3, 4, 5};
διπλό [] ret = Απόσπασμα (υπογραφή, 3, 2);
Console.Write (string.Join (",", ret));
Αποτέλεσμα:
3, 4
|
Από την ερώτησή σας, πρέπει να εκμεταλλευτείτε τους χειριστές. Πάρτε και.
var result = array.Skip (έναρξηIndex). Λήψη (numberOfElements)
Από τον κωδικό σας λοιπόν, φαίνεται ότι προσπαθείτε να κάνετε κάτι διαφορετικό, δηλαδή άθροισμα στοιχείων. Ο χειριστής .Sum μπορεί να σας βοηθήσει εδώ.
|
Δεν είναι η απάντηση που ψάχνετε; Περιηγηθείτε σε άλλες ερωτήσεις με ετικέτα c # arrays linq ή κάντε τη δική σας ερώτηση.